home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 3
/
Gekikoh Dennoh Club Vol. 3 (Japan).7z
/
Gekikoh Dennoh Club Vol. 3 (Japan) (Track 1).bin
/
tools
/
jftp
/
src.lzh
/
RECV.HAS
< prev
next >
Wrap
Text File
|
1997-12-10
|
3KB
|
113 lines
*----------------------------------------------------------
*
* Joystick port transfer function
*
* Copyright 1995 MAKOPi
*
*----------------------------------------------------------
PUSH .macro REG_LIST
movem.l REG_LIST,-(sp)
.endm
POP .macro REG_LIST
movem.l (sp)+,REG_LIST
.endm
***********************************************************
PPIA .equ $E9A001
PPIB .equ $E9A003
PPIC .equ $E9A005
PPICW .equ $E9A007
*PC4_HI .equ $9
*PC4_LOW .equ $8
***********************************************************
.include DOSCALL.EQU
.text
.even
*----------------------------------------------------------
*
* int joy_recv( unsigned char *buf, int len );
*
* 引数
* buf : 受信データバッファへのポインタ
* len : 受信データ個数(バイト単位)
*
* 戻り値
* d0.l >= 0 : 正常終了(d0:チェックsum)
*
*----------------------------------------------------------
.globl _joy_recv
_joy_recv:
move.l 4(sp),d0 * d0 = 受信データバッファへのポインタ
move.l 8(sp),d1 * d1 = 受信データ個数
PUSH d2-d7/a2-a4
move.l d0,a4 * a4 = 受信データバッファへのポインタ
move.l d1,d4 * d4 = 受信データ個数
** subq.l #1,d4 * d4 = 受信データ個数 - 1(dbraを使う時)
***** move.l #PPIA,a2 * (a2) = PPIA
move.l _uport,a2 * (a2) = PPIA
move.l #PPICW,a3 * (a3) = PPICW
moveq.l #4,d5 * d5 = 4bitシフト用(定数)
moveq.l #$0F,d6 * d6 = 下位4bitマスク用(定数)
move.b #%1100_0000,d7 * d7 = PA6チェック用(定数)
clr.l a1 * スーパーバイザーモード
IOCS __B_SUPER
move.l d0,d3 * d3 = SSP
ori.w #$0700,sr
moveq.l #0,d1
moveq.l #0,d2 * d2.l = チェックSUM初期化
* moveq.l #PC4_HI,d0 * PC4 -> HI
move.l _cport,d0 * PC4 -> HI
add.l d0,d0
addq.l #1,d0
move.b d0,(a3)
recvdata:
@@: move.b (a2),d0 *[8] PPIA 読み込み
cmp.b d7,d0 *[4]
bcc @b *[10?]
lsl.b d5,d0 *[12] d0 = 上位ニブル
@@: move.b (a2),d1 *[8] PPIA 読み込み
cmp.b d7,d1 *[4]
bcs @b *[10?]
and.b d6,d1 *[4] d1 = 下位ニブル
or.b d0,d1 *[4] d1 = 受信1バイト
move.b d1,(a4)+ *[8] 1バイト書き込み
add.l d1,d2 *[8] d2.l = d2.l + d1.l
* dbra d4,recvdata * 指定回数(d4)受信する
subq.l #1,d4 *[8] d4 = d4 - 1
bne recvdata *[10]
move.l _cport,d0 * PC?
add.l d0,d0
move.b d0,(a3) * PC4 -> LOW
andi.w #$f8ff,sr
cmpi.l #-1,d3 * もともとsuperviserだった?
beq @f
move.l d3,a1 * ユーザーモード
IOCS __B_SUPER
* clr.l d0
@@:
move.l d2,d0 * d0.l = 戻り値 = チェックsum
POP d2-d7/a2-a4
rts
.end